package com.Shuang.Recursion1;

import java.io.File;

public class SearchFile {
    public static void main(String[] args) throws Exception {
        File file = new File("D:/");
        String fileName = "QQ.exe";
        searchFile(file, fileName);
    }

    /**
     * 寻找文件操作 找到了返回true
     * @param dir 文件所在的目录
     * @param fileName 要找的文件的名字
     */
    public static boolean searchFile(File dir, String fileName) throws Exception {
//        1 先判断给的目录是否合理
        if (dir == null || !dir.isDirectory() || !dir.exists()){
            return false;  //没有权限访问，不是文件夹，不存在，都无法搜索
        }

        //说明是合理目录
        //2 将目录下的一级文件对象放到一个文件数组中
        File[] files = dir.listFiles();

        //3 判断是否存在一级文件对象并且是否可以拿到一级文件对象,不存在或者拿不到直接返回
        if (files == null || files.length == 0){
            return false;
        }

        //4 遍历各个一级文件对象，判断是文件还是文件夹
        for (File file : files) {
            if (file.isFile()){
                //5 说明是文件 判断是否是我们要找的那个文件名
                if (file.getName().equals(fileName)){
                    System.out.println("文件找到了~" + file.getAbsolutePath());
                    //将找到的程序运行一下
                    Runtime runtime = Runtime.getRuntime();
                    runtime.exec(file.getAbsolutePath());
                    return true;
                }
            }else{
                //6 说明这个文件对象是文件夹，要接着重复上述操作，即递归
                boolean isFound = searchFile(file, fileName);
                if (isFound){
                    return true;
                }
            }
        }
        return false;
    }
}
